iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0
DevOps

DevOps需要的技能樹...(應該)都點得到!系列 第 4

Day 4: 如何使用 Docker Compose 管理多容器應用程式

  • 分享至 

  • xImage
  •  

本章節「Docker」概要

Day 2: Docker 基本概念與安裝指南
Day 3: Dockerfile 語法解析與實踐
Day 4: 如何使用 Docker Compose 管理多容器應用程式

Docker Compose

Docker Compose 是一個用來定義和運行多容器 Docker 應用程序的工具。通過撰寫一個 docker-compose.yml 文件,你可以定義多個服務(容器)、網絡、卷等資源,並使用簡單的命令來啟動或停止整個應用程序。這使得管理復雜的多容器應用更加方便,尤其是在開發和測試環境中。Docker Compose 還支持設置環境變量、資源限制、依賴關係等,幫助你模擬生產環境,快速部署應用。

開源軟體倉庫

這裡要先推薦一個強大的腳本倉庫
是由VMware長期維護,稱作為bitnami

Bitnami 是一家提供開源應用程式封裝與部署解決方案的公司,它將流行的開源軟體打包成易於部署的容器、虛擬機和本地安裝包。這些封裝應用已經過預先配置,簡化了部署和維護的流程,並能在多種平台上快速啟動,廣泛應用於開發、測試和生產環境。

MySQL

由於我們已經安裝好Docker Compose了
底下直接以部署MySQL作為玩轉Docker Compose的例子
誰說只有寫code才能copy&paste,開源軟體也是可以copy&paste的喔!
bitnami倉庫的路徑:bitnami/mysql/docker-compose.yml

安裝

建立一個專案目錄
mkdir mysql
#移動至專案目錄
cd mysql
#撰寫腳本
sudo nano docker-compose.yml

貼入以下內容

# Copyright Broadcom, Inc. All Rights Reserved.
# SPDX-License-Identifier: APACHE-2.0

version: '2.1'

services:
  #容器名稱
  mysql:
    #映像檔來源
    image: docker.io/bitnami/mysql:8.4
    #映射端口
    ports:
      - '3306:3306'
    #掛載目錄
    volumes:
      - 'mysql_data:/bitnami/mysql/data'
    #環境變數
    environment:
      #允許密碼為空
      - ALLOW_EMPTY_PASSWORD=yes
    #健康檢查
    healthcheck:
      test: ['CMD', '/opt/bitnami/scripts/mysql/healthcheck.sh']
      interval: 15s
      timeout: 5s
      retries: 6

volumes:
  mysql_data:
    driver: local

部署

-f代表套用哪個yml腳本,適用於同一目錄底下有多個腳本
-d跟docker一樣代表在背景運行

docker compose -f docker-compose.yml up -d

https://ithelp.ithome.com.tw/upload/images/20240803/20168384MVJk4UN7tN.jpg

驗證容器

#查看容器運行狀態並記下容器ID
docker ps
#進入容器
docker exec -it <容器ID> bash

驗證容器內的MySQL

過多的SQL指令這裡不贅述,登入時可帶參數
-p是帶密碼
-h是帶host ip

#登入資料庫,剛才腳本裡配置的是空密碼不用打
mysql -u root

進入資料庫之後隨意下SQL指令驗證

#查看所有庫
show databases;

https://ithelp.ithome.com.tw/upload/images/20240803/20168384pY5Np7ilkZ.jpg

停止

-f代表套用哪個yml腳本,適用於同一目錄底下有多個腳本
-v代表將掛載目錄也解除掛載

docker compose -f docker-compose.yml down -v

支援的指令

Commands:
  build       Build or rebuild services
  config      Parse, resolve and render compose file in canonical format
  cp          Copy files/folders between a service container and the local filesystem
  create      Creates containers for a service.
  down        Stop and remove containers, networks
  events      Receive real time events from containers.
  exec        Execute a command in a running container.
  images      List images used by the created containers
  kill        Force stop service containers.
  logs        View output from containers
  ls          List running compose projects
  pause       Pause services
  port        Print the public port for a port binding.
  ps          List containers
  pull        Pull service images
  push        Push service images
  restart     Restart service containers
  rm          Removes stopped service containers
  run         Run a one-off command on a service.
  start       Start services
  stop        Stop services
  top         Display the running processes
  unpause     Unpause services
  up          Create and start containers
  version     Show the Docker Compose version information
  wait        Block until the first service container stops

同場加映1:只重啟單一服務

由於在一個docker-compose.yml中能夠一次起多個服務(尤其他們相依)
當然可以只重啟單一服務,而剛才宣告的服務名稱即為「mysql」

docker compose -f docker-compose.yml restart mysql

同場加映2:掛載目錄

寫在docker-compose.yml最末尾的volumes:
冒號後面又沒有路徑?那麼掛載出來的文件究竟存放在哪裡?

#預設路徑
sudo ls /var/lib/docker/volumes

若要指定的話,可以指定存放到本地當前的路徑
以下是docker-compose.yml寫法

    volumes:
      - ./data:/var/lib/mysql

至此Docker章節結束(因為不想在這裡浪費太多天)
有沒有突然覺得好像也就這樣而已XD
大家可以到bitnami倉庫挖一挖自己感興趣的部署腳本來玩玩看喔


上一篇
Day 3: Dockerfile 語法解析與實踐
下一篇
Day 5: Kubernetes 基本架構及安裝
系列文
DevOps需要的技能樹...(應該)都點得到!25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言